托管URL的网络解决方案对于Apache服务器来说很奇怪

时间:2015-02-24 04:17:52

标签: php apache .htaccess mod-rewrite hosting

我试图在我的网站上为动态生成的网页添加美化网址,以便当用户访问虚拟网址topicview/interesting-user-friendly-text时,他真的会看到,topicview.php?topicid=123

我在.htaccess文件中添加了必要的代码,用topicview/interesting-text替换了网址的topicview.php?topicname=interesting-test部分,但正则表达式仍然失误。

所以,我更改了Regex以返回整个URL,因此我可以看到为什么它不能使用此代码:

#Allow for topicview/topic-name URLs
RewriteRule (.+)$ topicview.php?topicname=$1 [L]

然后我访问了topicview/user-friendly-text。我不确定这是否是Network Solutions托管的独特之处,但是,当我检查topicname GET参数时,我得到了这个字符串作为回报:

data/1/2/323/232/823238/user/999999/htdocs/topicview.php

此网址未显示在topicname GET参数中,只显示常规文件,例如index.phptopicview.php,如果我只访问网址index.php或{{ 1}}

为什么URL内部如此表示给Apache服务器,如何重写topicview.php代码以获得mod_rewrite页面更友好的虚拟URL?

感谢

2 个答案:

答案 0 :(得分:0)

对于友好的网址,请在.htaccess文件中尝试此操作

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?topicview/([^/.*]+)/?$ topicview.php?topicname=$1 [L,QSA]

答案 1 :(得分:0)

RewriteRule中匹配的模式通常类似于REQUEST_URI,但您描述的行为表明它与REQUEST_FILENAME或类似的东西匹配,这是包含完整文档根目录的文件路径。

这表明您的RewriteRule不在您的.htaccess文件中,而是在您的或Apache配置文件中的规则中,对吗?

相反,您应该尝试使用RewriteCond获取所需的值,以便保证您与REQUEST_URI匹配,例如:

RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule . topicview.php?topicname=%1 [L]

请注意%1而不是$ 1,它允许您使用RewriteCond中捕获的值。