Php 如何在没有.htaccess的情况下重写URL?
我一直在网上读到这个,但仍然不知道如何正确地实现它。如果您能帮助我理解如何在没有.htaccess的情况下进行url重写,我将不胜感激 为了检查mod_rewrite是否启用,我运行了命令Php 如何在没有.htaccess的情况下重写URL?,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我一直在网上读到这个,但仍然不知道如何正确地实现它。如果您能帮助我理解如何在没有.htaccess的情况下进行url重写,我将不胜感激 为了检查mod_rewrite是否启用,我运行了命令~\sudo apachectl-t-D DUMP_MODULES。它产生了以下模块:重写模块(共享)。我不知道它是否与mod_rewrite相同 文件夹/etc/apache2/mods已启用/具有文件rewrite.load 我不清楚应该在哪个文件中添加重写规则 位于/etc/apache2/中的文件htt
~\sudo apachectl-t-D DUMP_MODULES
。它产生了以下模块:重写模块(共享)
。我不知道它是否与mod_rewrite
相同
文件夹/etc/apache2/mods已启用/
具有文件rewrite.load
我不清楚应该在哪个文件中添加重写规则
位于/etc/apache2/
中的文件httpd.conf
为空。但是,在/etc/apache2/sites enabled/
中有一个名为000 default
的文件,它如下所示:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
服务器管理员webmaster@localhost
DocumentRoot/var/www
选项如下符号链接
不允许超限
选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
ScriptAlias/cgi-bin//usr/lib/cgi-bin/
不允许超限
选项+执行CGI-多视图+符号链接所有者匹配
命令允许,拒绝
通融
ErrorLog${APACHE_LOG_DIR}/error.LOG
#可能的值包括:调试、信息、通知、警告、错误、临界值、,
#警惕,埃默格。
日志级别警告
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
别名/doc/“/usr/share/doc/”
选项索引多视图跟随符号链接
不允许超限
命令拒绝,允许
全盘否定
允许从127.0.0.0/255.0.0.0::1/128开始
我一点也不清楚应该在哪里添加重写规则。我尝试将它们添加到这个
000 default
文件的
部分,但没有成功。您将重写代码放在.htaccess文件所在的目录块中(如果您使用它们)。例如,如果/var/www是您的docroot,您可以将其放在:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]
</Directory>
选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写规则/index.php[L]
如果您使用的是apache 2.2.16或更高版本,请使用
FallbackResource /index.php
因为某种原因,它对我不起作用。我想做的是删除url中的
.php
扩展名。按照您的指示,我已将重写规则(在.htaccess中有效)添加到000默认文件的
,因此它现在看起来是这样的,但不起作用:选项索引遵循ymlinks多视图允许覆盖所有顺序允许,在重写条件%{REQUEST\u FILENAME}时拒绝所有重写引擎的允许-f RewriteRule^([^\.]+)$$1.php[NC,L]
@dmit这在您的.htaccess文件中有效吗?.htaccess文件所在的目录是什么?您还可以在OP a的前后URL示例中提供它吗?我在根目录>httpdocs
中有它。我把它移动到根目录,它也可以工作。之前的示例:www.mysite.com/login.php;之后:www.mysite.com/loginI我不明白。您是指您的代码和.htaccess
文件在/var/www/httpdocs
中吗?