【问题标题】:Apache 2.4 .htaccess friendly URL rewriteApache 2.4 .htaccess 友好的 URL 重写
【发布时间】:2017-04-05 20:38:35
【问题描述】:

在理解 .htaccess 文件并使其正常工作时遇到一些问题。 .htaccess 被识别....我在顶部输入了普通测试并得到了内部服务器错误。而且看起来 mod-rewrite 正在工作......因为我下载了一个测试 php 文件并且它工作正常。

我正在使用没有 php 页面的 Apache 2.4.23

但是我似乎无法让它正常工作。

我正在尝试获取此网址

http://example.com/ProjectTest/index.shtml?dynContent=Content1

然后像这样重写它

http://example.com/ProjectTest/Content1

我也尝试在整个网站上进行一般性操作,因为 ?dynContent=whatever 将是一个常量.....并尝试保持相同的路径.....就像下面的示例

改变这个

http://example.com/ProjectTest/ProjectFolder/index.shtml?dynContent=Content1

到这里

http://example.com/ProjectTest/ProjectFolder/Content1

我不太擅长 .htaccess 文件

更新: 好的......我让它工作......不太确定它为什么工作......但是当我输入 test-dev/ProjectTest/apples 或test-dev/ProjectTest/oranges 调用相应的内容。

这是我用的

RewriteRule ^ProjectTest/([^/\.]+)/?$ ProjectTest/index.shtml?dynContent=$1 [L]

然后我把它改写成这样,现在它适用于任何目录

RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    试试这个:

    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^dynContent=(.+)$
    RewriteRule ^/(.+)+/index.shtml $1/%1 [PT]
    

    这需要激活mod_rewritedynContent=(.+) 中括号的值存储在%1 中,^/(.+)+/index.shtml 中括号的值存储在$1 中。两者一起创建您的目标路径http://example.com/ProjectTest/ProjectFolder/Content1

    【讨论】:

    • 我更正了 index.shtml 拼写错误并尝试了它,但它对我不起作用....我还创建了一个 phpinfo 页面并检查了已加载的模块和 mod_rewrite 已加载...以下是来自 phpinfo 页面的信息。
    • Server Root D:/wamp64/bin/apache/apache2.4.23 Loaded Modules core mod_win32 mpm_winnt http_core mod_so mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_auth_digest mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cache mod_cache_disk mod_cgi mod_dir mod_env mod_file_cache mod_headers mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_userdir mod_vhost_alias mod_php5
    • 到底出了什么问题?错误信息?日志条目?有什么可以合作的吗?因为规则本身应该是正确的:/
    • 是的......它看起来应该可以工作......一直在阅读 Apache 2.2 和 2.4 mod_rewrite 之间的差异。昨晚看到有人建议在虚拟主机目录中使用 mod_rewrite。编写.htaccess 的新手......如果有的话,必须找到并查看日志......或者我必须做些什么才能打开它。今天下班后试试看。
    • 如果您有任何具体问题,请告诉我,我们在 Apache 2.2 和 2.4 上运行。如果您拥有对服务器的完全访问权限,您将不需要也不应该使用 .htaccess,因为如果您真的不需要它,它只会增加复杂性。坚持使用标准配置文件。要打开重写日志:在您的配置中搜索LogLevel,它可能设置为error,然后在该行中添加rewrite:trace,如下所示:LogLevel error rewrite:trace2。然后重启再次测试,error.log中会出现rewrites(用tail -f error_log|fgrep '[rewrite:' 搜索) Trace2应该够用了。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2021-07-06
    • 2015-01-04
    • 1970-01-01
    相关资源
    最近更新 更多