My htaccess RewriteRule works on localhost/mysite but not at mysite.com on a 1&1 shared host

旧巷老猫 提交于 2019-12-31 00:47:07

问题


Solved:

unfortunately, the solution is not a satisfying one. This morning, when trying @Wige's Suggestion, I found, to my suprise, that the Expected values WERE infact sent to the page as a GET query. Apparently, 1&1 (who I know have been making changes to their environment this last couple weeks), did something behind the scenes which magically fixed my problem, and now all of my previously unworking code is working as originally expected.


New info: The Apache version of the production server is 1.3.34 vs 2.2.21 on my localhost.

I'm having trouble figuring out why my RewriteRule is not working properly in production.

RewriteRule ^page/pretty-url/(.*)$ page.php?query=$1 [L]

In my local testing environment (localhost/mysite/page/pretty-url/{...}) it works fine, but on mysite.com/page/pretty-url/{...} it doesn't work properly. It loads page.php as expected but apparently the ?query=$1 piece is ignored ($_GET is empty)

I imagine that the problem is somehow related to the server configuration. I'm on a 1&1 shared hosting account with no httpd.conf access.


What that RewriteRule does (or should do):

I want urls like

*example.com/page/pretty-url/{{info_for_dynamic_content}}

to be rewritten to

*/page.php?query={{info_for_dynamic_content}}

So I can access info_for_dynamic_content

within php as $_GET['query']


The full .htaccess file for reference:

AddHandler x-mapp-php6 .php

DirectoryIndex index.php
ErrorDocument 404 /index.php 

Options +FollowSymLinks

# per @Jacques Chester's suggestion
Options -MultiViews

RewriteEngine on
RewriteBase /

# the rule in question
RewriteRule ^page/pretty-url/(.*)$ page.php?query=$1 [L]

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule (.*) /index.php [L]

回答1:


Most likely, your host is storing the variables somewhere else. I would add a call to phpinfo(); into your script and go through the environment variables there to see if you can find the values that should have been in get.




回答2:


Seems to be connected to 1&1's hosting environment.

See this question, in particular, this answer.

Basically it appears that 1&1 enable "MultiViews". By adding

Options -MultiViews

You disable that setting for your website and according to various reports, this resolves the issue.




回答3:


I struggled with RewriteRule issues on a 1&1 / 1and1 / IONOS shared server for WEEKS and eventually I found the perfect setup for a 1 and 1 shared server, start your .htaccess file like this

Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

I hope this helps someone as 1&1 are useless when it comes to htaccess support



来源:https://stackoverflow.com/questions/13897801/my-htaccess-rewriterule-works-on-localhost-mysite-but-not-at-mysite-com-on-a-11

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!