abigail Posted June 18, 2012 Share Posted June 18, 2012 I'm trying to do mod_rewrite like this: RewriteEngine On RewriteRule ^cancer/?$ cancer.php RewriteRule ^ptsd/?$ptsd.php I have my testing directory, named minus, so the same code should be at adviceofthequeen.com and adviceofthequeen.com/minus/ I put this code into the .htaccess file in minus directory and when I type into browser: http://adviceofthequeen.com/minus/cancer the cancer.php page comes up correctly. But when I type into browser: http://adviceofthequeen.com/minus/cancer/ the cancer.php pages comes up but without the style sheet and images. So I also put this same code into .htaccess file above the minus directory (the real live code) and when I type into browser: http://adviceofthequeen.com/ it throws a 500 Internal Server Error. I'm pretty sure that if I ask hosting tech support about this they will suggest I use the cpanel redirect. I want to do this for all my files and now there is only 6 but there could be maybe about 50 when I'm done. It doesn't seem that redirect is the best way to do this. Is there any syntax error in my mod_rewrite? There was nothing in the .htaccess files except directory protection in the minus directory which is temporarily not on right now. Apache version 2.2.21 PHP version 5.2.17 MySQL version 5.0.92-community-log Link to comment Share on other sites More sharing options...
Larry Posted June 18, 2012 Share Posted June 18, 2012 There is a syntax error in your .htaccess: you're missing a space on the last line, before the destination. Also, the reason your CSS and images don't show up with cancer/ is that the browser thinks its in a subdirectory and you're probably using relative paths to the CSS and images. Link to comment Share on other sites More sharing options...
abigail Posted June 18, 2012 Author Share Posted June 18, 2012 (edited) Thank-you for finding the syntax typo. Evidently, that is the reason it wouldn't run in my live directory! (I've changed the names of my pages to add _treatment at the end.) I took off the / from the cancer_treatment page and that works well now. The only time it would show 404 not found is if the user typed it into browser with the /. My code won't use that. Does that make sense to you that I should do it that way or do you think I have to use absolute referencing? This is the code I'm using now: RewriteEngine On RewriteRule ^cancer_treatment?$ cancer_treatment.php RewriteRule ^ptsd_treatment?$ ptsd_treatment.php Edited June 19, 2012 by abigail Link to comment Share on other sites More sharing options...
abigail Posted June 19, 2012 Author Share Posted June 19, 2012 Here's something I thought of now. Can I write just one RewriteRule that will change all my file names, here are examples: RewriteRule ^cancer_treatment$ cancer_treatment.php RewriteRule ^hiv_aids_treatment$ hiv_aids_treatment.php RewriteRule ^sids_treatment$ sids_treatment.php RewriteRule ^sleep_disorders_treatment$ sleep_disorders_treatment.php RewriteRule ^asthma_treatment$ asthma_treatment.php So if it ends with _treatment then I want .php added. The reason I'm doing this is for SEO. That's why I want treatment in all the names. Link to comment Share on other sites More sharing options...
Larry Posted June 20, 2012 Share Posted June 20, 2012 You can definitely do this as one rule. My inclination is to be specific: RewriteRule ^(cancer_treatment|hiv_aids_treatment|sids_treatment)/?$ $1.php But you could also write something more flexible, if you'd rather. I would prepare for the / and use absolute references to my CSS and images. Link to comment Share on other sites More sharing options...
abigail Posted June 20, 2012 Author Share Posted June 20, 2012 Actually, I figured out an even better way for me. So my customer can type into browser just cancer and my program can use cancer_treatment. They can even type in just hiv or just aids or hiv_aids. Here's what my code looks like then: RewriteEngine On RewriteRule ^cancer[a-z_]*$ cancer_treatment.php RewriteRule ^hiv|aids[a-z_]*$ hiv_aids_treatment.php RewriteRule ^sleep[a-z_]*$ sleep_disorders_treatment.php RewriteRule ^sickle[a-z_]*$ sickle_cell_anemia_treatment.php RewriteRule ^addict[a-z_]*$ addiction_treatment.php RewriteRule ^fear|phobia[a-z_]*$ fear_phobia_treatment.php Regarding my previous post, the reason to use one Rule is because I wouldn't have to edit file each time I add a new treatment. So there is not much advantage to do it your way, I would think. But I like my new idea much better anyway. I suppose I will have to use absolute referencing for the css and images. Otherwise user sees 404 error but that is only if they type in the trailing /. Someone might do that I suppose. Anyway, except for that minor problem of trailing / everything seems to be working great now. Link to comment Share on other sites More sharing options...
Recommended Posts