我打赌这里有一个明显的问题,我没有看到。
对于那些熟悉Mod-Rewrite
的人来说,这是重要的一点 带有mod-rewrite规则的.htaccess文件存在于: http://www.thedomain.com/.htaccess 用户转到此网址: http://www.thedomain.com/test/blog Mod-Rewrite规则实际上应该告诉服务器访问此URL: http://www.thedomain.com/index.php?page=blog
htaccess的:
Options FollowSymLinks
Options -MultiViews
RewriteEngine on
RewriteRule ^test/([^/.]+)$ /index.php?page=$1 [L]
此代码/请求组合不起作用。如果你想知道代码片段^测试不是^ / test,那是因为显然这是GoDaddy的一个问题,代码在^后面失败 - 这似乎可能与我的问题有关,我将进一步解释......如果我更改.htaccess代码行:
RewriteRule ^test/([^/.]+)$ /index.php?page=$1 [L]
到
RewriteRule ^test([^/.]+)$ /index.php?page=$1 [L]
(只需删除/ here:^ test /([^/.]+))
当用户查看正确的index.php?page = blog服务器响应时,请求的URL更改为容纳(删除斜杠; http://www.thedomain.com/ testblog )时,代码可以正常工作。在我看来,我不能在RewriteRule的darn匹配方面使用任何斜杠。是什么给了什么?
更新:如果完全相关,这个.htaccess文件和问题的相关文件都存在于托管此主机的GoDaddy服务器的子目录中,尽管该域指向子目录根。不确定这是否相关。
更新:此服务器(在服务器根目录下)实际上正在运行带有漂亮网址的wordpress,它们的工作完全正常。我假设wordpress使用mod-rewrite来制作疯狂的网址,比如thedomain.com/2008/11/15/the-article-title.html工作......?
非常感谢。
答案 0 :(得分:2)
RewriteBase您要找的是什么?
答案 1 :(得分:2)
这里有一个很好的测试实用程序
http://www.helicontech.com/download-isapi_rewrite.htm
尝试将代码更改为:
^/test/([^/]+)$ /index.php?page=$1 [L]
或没有斜线
^test[^a-z]+([a-z]*)$ /index.php?page=$1 [L]
答案 2 :(得分:1)
我无法在GoDaddy上找到解决此问题的可靠方法;无论出于何种原因,我都不能在URL中尝试重写(http://www.somedomain.com/testingthis除了http://www.somedomain.com/testing/this之外)。
我最终使用Wordpress .htaccess将所有不存在的文件/目录请求发送回我的index.php。然后我使用带有pathinfo()的$ _SERVER ['REQUEST_URI'] var来解析URL,然后指导要从解析加载的内容。这很好用,速度很快,可能与Wordpress使用的方法相同。
感谢您的尝试!
答案 3 :(得分:0)
如果你想知道代码片段^测试不是^ / test,那是因为显然这是GoDaddy的一个问题,代码在^ [...]
之后失败了
这不奇怪但是必要:
<强> Per-directory Rewrites 强>
在
.htaccess
文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)会自动删除以进行模式匹配并自动替换完成后添加。
每个目录前缀用于文档根目录(/.htaccess
)中的.htaccess文件的URL路径根(/
)。因此,必须使用每个目录前缀 ^
编写/
的模式。
以同样的方式处理替换。应用规则后,每个目录前缀将添加到替换项中。所以试试这条规则:
RewriteRule ^test/([^/.]+)$ index.php?page=$1 [L]
答案 4 :(得分:0)
好的,首先,我认为GoDaddy apache服务器只是关闭了一些选项。我认为,如果他们的配置中没有AllowOverride FileInfo
,RewriteRule
将无法正常运行,或者根本无法运行。
这意味着令人惊讶的是网址http://www.thedomain.com/testblog
完全有效,并且会被重写。所以我想我有点困惑。
这是一个想法:尝试创建一个名为test
的目录,并将.htaccess
文件放在那里!它看起来像这样:
Options FollowSymLinks
RewriteEngine on
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
好的,另一个想法:使用RewriteCond
。也许你可以直接检查请求URI,如下所示:
Options FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/test/([^/]+)
RewriteRule . /index.php?page=%1 [L]
最后一个想法:也许您的浏览器会看到URL http://www.thedomain.com/test/blog
并认为它是一个目录,并添加斜杠?因此,发送的网址为http://www.thedomain.com/test/blog/
。在这种情况下,除非您允许使用尾部斜杠,否则REGEX将不匹配:
RewriteRule ^test/([^/.]+)/?$ /index.php?page=$1 [L]
糟糕。很抱歉 - 在重写的HTTP请求中有很多可能出错的东西,以及尝试克服这些问题的多种方法: - )